#include "ThreadBajadorPiezas.h"
#include "InterfazPeer.h"

ThreadBajadorPiezas::ThreadBajadorPiezas(Torrent *torrent, InterfazPeer *interfaz, Condition *conditionPeerChoking, Condition *conditionTerminoBajado) {

	this->torrent = torrent;
	this->interfaz = interfaz;
	this->conditionPeerChoking = conditionPeerChoking;
	this->conditionTerminoBajado = conditionTerminoBajado;
}

ThreadBajadorPiezas::~ThreadBajadorPiezas() {

}


void* ThreadBajadorPiezas::run() {

	Pieza *piezaActual;

	while (!this->getStop()) {

		if (this->interfaz->getPeerChoking()) {
			this->conditionPeerChoking->wait();
		}

		if (!this->getStop()) {

			/* Si el Peer no esta bajando, le asigno una pieza para que empieza a bajarla */
			if (!this->interfaz->estaBajando()) {

				piezaActual = this->torrent->asignarPiezaConMenosPeers(this->interfaz->getPeerId());
				/* Se le setea al Peer la pieza asignada por el torrent */
				this->interfaz->setPiezaActual(piezaActual);

				/* Se espera a que el Peer mandé una senial indicando si termino de trabajar con la pieza */
				this->conditionTerminoBajado->wait();
			}
		}
	}

	return NULL;
}

void ThreadBajadorPiezas::stop(){
	//TODO hacer el stop.
}
